# scrapy持久化存储
# - 基于终端指令：
#   - 要求：只可以将parse方法的返回值存储到本地的文本文件重
#   - 注意：持久化存储对应的文本文件类型只可以为：json jsonlines jl csc xml marshal pickle
#   - 指令：scrapy crawl qiubai -o ./qiubai.csv
#   - 好处：简介高效便捷
#   - 缺点：局限性比较强（数据只可以存储到指定后缀的文本文件中）
#
# - 基于管道：
#   - 编码流程：
#       - 数据解析
#       - 在item类中定义相关的属性
#       - 将解析的数据封装存储到item类型的对象
#       - 将item类型的对象提交给管道进行持久化存储的操作
#       - 在管道类中的process_item中要将其接受到的item对象中存储的数据进行持久化存储操作
#       - 在配置文件中开启管道
#   - 好处：
#       - 通用性强
import scrapy
from qiubaiPro.items import QiubaiproItem

class QiubaiSpider(scrapy.Spider):
    name = "qiubai"
    # allowed_domains = ["www.xxx.com"]
    start_urls = ["https://www.xxx.qiushibaike.com/text/"]

    # def parse(self, response):
    #     # 解析：作者的名称 + 段子内容
    #     div_list = response.xpath('')
    #     all_data = []   # 存储所有解析到的数据
    #     for div in div_list:
    #         # xpath返回的是列表，但是列表元素一定是Selector类型的对象
    #         # extract可以将Selector对象中data参数存储的字符串提取处理
    #         # author = div.xpath('.//div[@class="')[0].extract()
    #         author = div.xpath('.//div[@class="').extract_first()
    #         # 列表调用了extract之后，则表示将列表中每一个Selector对象中data对应的字符串提取了出来
    #         content = div.xpath('.//div[@class="').extract()
    #         content = ''.join(content)
    #
    #         dic = {
    #             'author': author,
    #             'content': content
    #         }
    #         all_data.append(dic)
    #
    #     return all_data
    #         # print(author, content)
    #         # break

    def parse(self, response):
        # 解析：作者的名称 + 段子内容
        div_list = response.xpath('')
        all_data = []   # 存储所有解析到的数据
        for div in div_list:
            # xpath返回的是列表，但是列表元素一定是Selector类型的对象
            # extract可以将Selector对象中data参数存储的字符串提取处理
            # author = div.xpath('.//div[@class="')[0].extract()
            author = div.xpath('.//div[@class="').extract_first()
            # 列表调用了extract之后，则表示将列表中每一个Selector对象中data对应的字符串提取了出来
            content = div.xpath('.//div[@class="').extract()
            content = ''.join(content)

            item = QiubaiproItem()
            item['author'] = author
            item['content'] = content

            yield item  # 将item提交给了管道
